/**
 * 在对用next函数时，传入的参数会作为上一个yield语句的返回值
 * 注意： 第一个next不传递参数，如果第一个next中要接收参数，则从生成器函数foo这里传递参数
 */
function* foo(initial) {
  console.log('-----函数开始执行-----')

  const value1 = 1
  console.log(value1)
  const res1 = yield value1 * initial

  const value2 = 2 * res1
  console.log(value2)
  yield value2

  const value3 = 3
  console.log(value3)
  yield

  console.log('-----函数结束执行-----')
  return '12345'
}

const generator = foo(90)
//开始第一段代码，第一个yield之前的代码，这个next不接受参数
console.log(generator.next())
//开始第二段代码，第二个yield之前的代码，这里的参数10代表的是上一个yield的返回值，也就是res1
console.log(generator.next(10))
//开始第三段代码，第三个yield之前的代码
console.log(generator.next())
//开始第四段代码
console.log(generator.next())
console.log(generator.next())
